<!DOCTYPE html>
<html>
<!-- SECTION: Programming -->
  <head>
    <title>Raster API</title>
    <meta name="keywords" content="Programming">
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    <meta name="creator" content="codedoc v3.1">
    <meta name="author" content="Unknown">
    <meta name="copyright" content="Unknown">
    <meta name="version" content="0.0">
    <style type="text/css"><!--
BODY {
  font-family: lucida grande, geneva, helvetica, arial, sans-serif;
}

H1, H2, H3, H4, H5, H6, P, TD, TH {
  font-family: lucida grande, geneva, helvetica, arial, sans-serif;
}

H1 { font-size: 2em; }
H2 { font-size: 1.75em; }
H3 { font-size: 1.5em; }
H4 { font-size: 1.25em; }

KBD {
  font-family: monaco, courier, monospace;
  font-weight: bold;
}

PRE {
  font-family: monaco, courier, monospace;
}

BLOCKQUOTE {
  border-left: solid 2px #777;
  margin: 1em 0;
  padding: 10px;
}

BLOCKQUOTE OL LI {
  margin-left: -1em;
}

PRE.command, PRE.example {
  background: #eee;
  margin: 0 36pt;
  padding: 10px;
}

P.compact {
  margin: 0;
}

P.example {
  font-style: italic;
  margin-left: 36pt;
}

DL.man DD {
  margin-left: 5em;
}

DL.man DT {
  margin-left: 0;
}

PRE.man {
  margin: 0;
}

PRE.command EM, PRE.example EM {
  font-family: lucida grande, geneva, helvetica, arial, sans-serif;
}

P.command {
  font-family: monaco, courier, monospace;
  margin-left: 36pt;
}

P.formula {
  font-style: italic;
  margin-left: 36pt;
}

A IMG {
  border: none;
}

A:link:hover IMG {
  background: #f0f0f0;
  border-radius: 10px;
  -moz-border-radius: 10px;
}

A:link, A:visited {
  font-weight: inherit;
  text-decoration: none;
}

A:link:hover, A:visited:hover, A:active {
  text-decoration: underline;
}

SUB, SUP {
  font-size: 50%;
}

TR.data, TD.data, TR.data TD {
  margin-top: 10pt;
  padding: 5pt;
  border-bottom: solid 1pt #999999;
}

TR.data TH {
  border-bottom: solid 1pt #999999;
  padding-top: 10pt;
  padding-left: 5pt;
  text-align: left;
}

DIV.table TABLE {
  border: solid thin #999999;
  border-collapse: collapse;
  border-spacing: 0;
  margin-left: auto;
  margin-right: auto;
}

DIV.table CAPTION {
  caption-side: top;
  font-size: 120%;
  font-style: italic;
  font-weight: bold;
  margin-left: auto;
  margin-right: auto;
}

DIV.table TABLE TD {
  border: solid thin #cccccc;
  padding: 5pt 10pt 0;
}

DIV.table TABLE TH {
  background: #cccccc;
  border: none;
  border-bottom: solid thin #999999;
}

DIV.figure TABLE {
  margin-left: auto;
  margin-right: auto;
}

DIV.figure CAPTION {
  caption-side: bottom;
  font-size: 120%;
  font-style: italic;
  font-weight: bold;
  margin-left: auto;
  margin-right: auto;
}

TH.label {
  text-align: right;
  vertical-align: top;
}

TH.sublabel {
  text-align: right;
  font-weight: normal;
}

HR {
  border: solid thin;
}

SPAN.info {
  background: black;
  border: thin solid black;
  color: white;
  font-size: 80%;
  font-style: italic;
  font-weight: bold;
  white-space: nowrap;
}

H2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
  float: right;
  font-size: 100%;
}

H1.title {
}

H2.title, H3.title {
  border-bottom: solid 2pt #000000;
}

DIV.indent, TABLE.indent {
  margin-top: 2em;
  margin-left: auto;
  margin-right: auto;
  width: 90%;
}

TABLE.indent {
  border-collapse: collapse;
}

TABLE.indent TD, TABLE.indent TH {
  padding: 0;
}

TABLE.list {
  border-collapse: collapse;
  margin-left: auto;
  margin-right: auto;
  width: 90%;
}

TABLE.list TH {
  background: white;
  border-bottom: solid thin #cccccc;
  color: #444444;
  padding-top: 10pt;
  padding-left: 5pt;
  text-align: left;
  vertical-align: bottom;
  white-space: nowrap;
}

TABLE.list TH A {
  color: #4444cc;
}

TABLE.list TD {
  border-bottom: solid thin #eeeeee;
  padding-top: 5pt;
  padding-left: 5pt;
}

TABLE.list TR:nth-child(even) {
  background: #f8f8f8;
}

TABLE.list TR:nth-child(odd) {
  background: #f4f4f4;
}

DT {
  margin-left: 36pt;
  margin-top: 12pt;
}

DD {
  margin-left: 54pt;
}

DL.category DT {
  font-weight: bold;
}

P.summary {
  margin-left: 36pt;
  font-family: monaco, courier, monospace;
}

DIV.summary TABLE {
  border: solid thin #999999;
  border-collapse: collapse;
  border-spacing: 0;
  margin: 10px;
}

DIV.summary TABLE TD, DIV.summary TABLE TH {
  border: solid thin #999999;
  padding: 5px;
  text-align: left;
  vertical-align: top;
}

DIV.summary TABLE THEAD TH {
  background: #eeeeee;
}

/* API documentation styles... */
div.body h1 {
  font-size: 250%;
  font-weight: bold;
  margin: 0;
}
div.body h2 {
  font-size: 250%;
  margin-top: 1.5em;
}
div.body h3 {
  font-size: 150%;
  margin-bottom: 0.5em;
  margin-top: 1.5em;
}
div.body h4 {
  font-size: 110%;
  margin-bottom: 0.5em;
  margin-top: 1.5em;
}
div.body h5 {
  font-size: 100%;
  margin-bottom: 0.5em;
  margin-top: 1.5em;
}
div.contents {
  background: #e8e8e8;
  border: solid thin black;
  padding: 10px;
}
div.contents h1 {
  font-size: 110%;
}
div.contents h2 {
  font-size: 100%;
}
div.contents ul.contents {
  font-size: 80%;
}
.class {
  border-bottom: solid 2px gray;
}
.constants {
}
.description {
  margin-top: 0.5em;
}
.discussion {
}
.enumeration {
  border-bottom: solid 2px gray;
}
.function {
  border-bottom: solid 2px gray;
  margin-bottom: 0;
}
.members {
}
.method {
}
.parameters {
}
.returnvalue {
}
.struct {
  border-bottom: solid 2px gray;
}
.typedef {
  border-bottom: solid 2px gray;
}
.union {
  border-bottom: solid 2px gray;
}
.variable {
}
h1, h2, h3, h4, h5, h6 {
  page-break-inside: avoid;
}
blockquote {
  border: solid thin gray;
  box-shadow: 3px 3px 5px rgba(0,0,0,0.5);
  padding: 10px 10px 0px;
  page-break-inside: avoid;
}
p code, li code, p.code, pre, ul.code li {
  background: rgba(127,127,127,0.1);
  border: thin dotted gray;
  font-family: monospace;
  hyphens: manual;
  -webkit-hyphens: manual;
  page-break-inside: avoid;
}
p.code, pre, ul.code li {
  padding: 10px;
}
p code, li code {
  padding: 2px 5px;
}
a:link, a:visited {
  text-decoration: none;
}
span.info {
  background: black;
  border: solid thin black;
  color: white;
  font-size: 80%;
  font-style: italic;
  font-weight: bold;
  white-space: nowrap;
}
h2 span.info, h3 span.info, h4 span.info {
  border-radius: 10px;
  float: right;
  font-size: 80%;
  padding: 3px 6px;
}
h2.title span.info, h3.title span.info, h4.title span.info {
  border-bottom-left-radius: 0px;
  border-bottom-right-radius: 0px;
}
h2.title span.info {
  padding: 4px 6px;
}
ul.code, ul.contents, ul.subcontents {
  list-style-type: none;
  margin: 0;
  padding-left: 0;
}
ul.code li {
  margin: 0;
}
ul.contents > li {
  margin-top: 1em;
}
ul.contents li ul.code, ul.contents li ul.subcontents {
  padding-left: 2em;
}
table.list {
  border-collapse: collapse;
  width: 100%;
}
table.list tr:nth-child(even) {
  background: rgba(127,127,127,0.1);]n}
table.list th {
  border-right: 2px solid gray;
  font-family: monospace;
  padding: 5px 10px 5px 2px;
  text-align: right;
  vertical-align: top;
}
table.list td {
  padding: 5px 2px 5px 10px;
  text-align: left;
  vertical-align: top;
}
h1.title {
}
h2.title {
  border-bottom: solid 2px black;
}
h3.title {
  border-bottom: solid 2px black;
}
--></style>
  </head>
  <body>
<!--
  Raster API documentation for CUPS.

  Copyright © 2008-2019 by Apple Inc.

  Licensed under Apache License v2.0.  See the file "LICENSE" for more
  information.
-->

<h1 class='title'>Raster API</h1>

<div class='summary'><table summary='General Information'>
<thead>
<tr>
	<th>Header</th>
	<th>cups/raster.h</th>
</tr>
</thead>
<tbody>
<tr>
	<th>Library</th>
	<td>-lcups</td>
</tr>
<tr>
	<th>See Also</th>
	<td>Programming: <a href='cupspm.html'>CUPS Programming Manual</a><br>
	Programming: <a href='api-ppd.html'>PPD API</a><br>
	References: <a href='spec-ppd.html'>CUPS PPD Specification</a></td>
</tr>
</tbody>
</table></div>
    <div class="contents">
      <h2 class="title">Contents</h2>
      <ul class="contents">
        <li><a href="#OVERVIEW">Overview</a></li>
        <li><a href="#TASKS">Functions by Task</a><ul class="subcontents">
          <li><a href="#OPENCLOSE">Opening and Closing Raster Streams</a></li>
          <li><a href="#READING">Reading Raster Streams</a></li>
          <li><a href="#WRITING">Writing Raster Streams</a></li>
        </ul></li>
        <li><a href="#FUNCTIONS">Functions</a><ul class="subcontents">
          <li><a href="#cupsRasterClose">cupsRasterClose</a></li>
          <li><a href="#cupsRasterErrorString">cupsRasterErrorString</a></li>
          <li><a href="#cupsRasterInitPWGHeader">cupsRasterInitPWGHeader</a></li>
          <li><a href="#cupsRasterOpen">cupsRasterOpen</a></li>
          <li><a href="#cupsRasterOpenIO">cupsRasterOpenIO</a></li>
          <li><a href="#cupsRasterReadHeader">cupsRasterReadHeader</a></li>
          <li><a href="#cupsRasterReadHeader2">cupsRasterReadHeader2</a></li>
          <li><a href="#cupsRasterReadPixels">cupsRasterReadPixels</a></li>
          <li><a href="#cupsRasterWriteHeader">cupsRasterWriteHeader</a></li>
          <li><a href="#cupsRasterWriteHeader2">cupsRasterWriteHeader2</a></li>
          <li><a href="#cupsRasterWritePixels">cupsRasterWritePixels</a></li>
        </ul></li>
        <li><a href="#TYPES">Data Types</a><ul class="subcontents">
          <li><a href="#cups_adv_t">cups_adv_t</a></li>
          <li><a href="#cups_bool_t">cups_bool_t</a></li>
          <li><a href="#cups_cspace_t">cups_cspace_t</a></li>
          <li><a href="#cups_cut_t">cups_cut_t</a></li>
          <li><a href="#cups_edge_t">cups_edge_t</a></li>
          <li><a href="#cups_jog_t">cups_jog_t</a></li>
          <li><a href="#cups_mode_t">cups_mode_t</a></li>
          <li><a href="#cups_order_t">cups_order_t</a></li>
          <li><a href="#cups_orient_t">cups_orient_t</a></li>
          <li><a href="#cups_page_header2_t">cups_page_header2_t</a></li>
          <li><a href="#cups_page_header_t">cups_page_header_t</a></li>
          <li><a href="#cups_raster_iocb_t">cups_raster_iocb_t</a></li>
          <li><a href="#cups_raster_t">cups_raster_t</a></li>
        </ul></li>
        <li><a href="#STRUCTURES">Structures</a><ul class="subcontents">
          <li><a href="#cups_page_header2_s">cups_page_header2_s</a></li>
          <li><a href="#cups_page_header_s">cups_page_header_s</a></li>
        </ul></li>
        <li><a href="#ENUMERATIONS">Enumerations</a><ul class="subcontents">
          <li><a href="#cups_adv_e">cups_adv_e</a></li>
          <li><a href="#cups_bool_e">cups_bool_e</a></li>
          <li><a href="#cups_cspace_e">cups_cspace_e</a></li>
          <li><a href="#cups_cut_e">cups_cut_e</a></li>
          <li><a href="#cups_edge_e">cups_edge_e</a></li>
          <li><a href="#cups_jog_e">cups_jog_e</a></li>
          <li><a href="#cups_mode_e">cups_mode_e</a></li>
          <li><a href="#cups_order_e">cups_order_e</a></li>
          <li><a href="#cups_orient_e">cups_orient_e</a></li>
        </ul></li>
      </ul>
    </div>
    <div class="body">
<!--
  Raster API introduction for CUPS.

  Copyright © 2007-2019 by Apple Inc.
  Copyright © 1997-2006 by Easy Software Products, all rights reserved.

  Licensed under Apache License v2.0.  See the file "LICENSE" for more
  information.
-->

<h2 class='title'><a name="OVERVIEW">Overview</a></h2>

<p>The CUPS raster API provides a standard interface for reading and writing
CUPS raster streams which are used for printing to raster printers. Because the
raster format is updated from time to time, it is important to use this API to
avoid incompatibilities with newer versions of CUPS.</p>

<p>Two kinds of CUPS filters use the CUPS raster API - raster image processor
(RIP) filters such as <code>pstoraster</code> and <code>cgpdftoraster</code>
(macOS) that produce CUPS raster files and printer driver filters that
convert CUPS raster files into a format usable by the printer. Printer
driver filters are by far the most common.</p>

<p>CUPS raster files (<code>application/vnd.cups-raster</code>) consists of
a stream of raster page descriptions produced by one of the RIP filters such as
<var>pstoraster</var>, <var>imagetoraster</var>, or
<var>cgpdftoraster</var>. CUPS raster files are referred to using the
<a href='#cups_raster_t'><code>cups_raster_t</code></a> type and are
opened using the <a href='#cupsRasterOpen'><code>cupsRasterOpen</code></a>
function. For example, to read raster data from the standard input, open
file descriptor 0:</p>

<pre class="example">
#include &lt;cups/raster.h&gt;

<a href="#cups_raster_t">cups_raster_t</a> *ras = <a href="#cupsRasterOpen">cupsRasterOpen</a>(0, CUPS_RASTER_READ);
</pre>

<p>Each page of data begins with a page dictionary structure called
<a href="#cups_page_header2_t"><code>cups_page_header2_t</code></a>. This
structure contains the colorspace, bits per color, media size, media type,
hardware resolution, and so forth used for the page.</p>

<blockquote><b>Note:</b>

  <p>Do not confuse the colorspace in the page header with the PPD
  <tt>ColorModel</tt> keyword. <tt>ColorModel</tt> refers to the general type of
  color used for a device (Gray, RGB, CMYK, DeviceN) and is often used to
  select a particular colorspace for the page header along with the associate
  color profile. The page header colorspace (<tt>cupsColorSpace</tt>) describes
  both the type and organization of the color data, for example KCMY (black
  first) instead of CMYK and RGBA (RGB + alpha) instead of RGB.</p>

</blockquote>

<p>You read the page header using the
<a href="#cupsRasterReadHeader2"><code>cupsRasterReadHeader2</code></a>
function:</p>

<pre class="example">
#include &lt;cups/raster.h&gt;

<a href="#cups_raster_t">cups_raster_t</a> *ras = <a href="#cupsRasterOpen">cupsRasterOpen</a>(0, CUPS_RASTER_READ);
<a href="#cups_page_header2_t">cups_page_header2_t</a> header;

while (<a href="#cupsRasterReadHeader2">cupsRasterReadHeader2</a>(ras, &amp;header))
{
  /* setup this page */

  /* read raster data */

  /* finish this page */
}
</pre>

<p>After the page dictionary comes the page data which is a full-resolution,
possibly compressed bitmap representing the page in the printer's output
colorspace. You read uncompressed raster data using the
<a href="#cupsRasterReadPixels"><code>cupsRasterReadPixels</code></a>
function. A <code>for</code> loop is normally used to read the page one line
at a time:</p>

<pre class="example">
#include &lt;cups/raster.h&gt;

<a href="#cups_raster_t">cups_raster_t</a> *ras = <a href="#cupsRasterOpen">cupsRasterOpen</a>(0, CUPS_RASTER_READ);
<a href="#cups_page_header2_t">cups_page_header2_t</a> header;
int page = 0;
int y;
char *buffer;

while (<a href="#cupsRasterReadHeader2">cupsRasterReadHeader2</a>(ras, &amp;header))
{
  /* setup this page */
  page ++;
  fprintf(stderr, "PAGE: %d %d\n", page, header.NumCopies);

  /* allocate memory for 1 line */
  buffer = malloc(header.cupsBytesPerLine);

  /* read raster data */
  for (y = 0; y &lt; header.cupsHeight; y ++)
  {
    if (<a href="#cupsRasterReadPixels">cupsRasterReadPixels</a>(ras, buffer, header.cupsBytesPerLine) == 0)
      break;

    /* write raster data to printer on stdout */
  }

  /* finish this page */
}
</pre>

<p>When you are done reading the raster data, call the
<a href="#cupsRasterClose"><code>cupsRasterClose</code></a> function to free
the memory used to read the raster file:</p>

<pre class="example">
<a href="#cups_raster_t">cups_raster_t</a> *ras;

<a href="#cupsRasterClose">cupsRasterClose</a>(ras);
</pre>


<h2 class='title'><a name="TASKS">Functions by Task</a></h2>

<h3><a name="OPENCLOSE">Opening and Closing Raster Streams</a></h3>

<ul class="code">

	<li><a href="#cupsRasterClose" title="Close a raster stream.">cupsRasterClose</a></li>
	<li><a href="#cupsRasterOpen" title="Open a raster stream.">cupsRasterOpen</a></li>

</ul>

<h3><a name="READING">Reading Raster Streams</a></h3>

<ul class="code">

	<li><a href="#cupsRasterReadHeader" title="Read a raster page header and store it in a version 1 page header structure.">cupsRasterReadHeader</a> <span class="info">Deprecated in CUPS 1.2/macOS 10.5</span></li>
	<li><a href="#cupsRasterReadHeader2" title="Read a raster page header and store it in a version 2 page header structure.">cupsRasterReadHeader2</a></li>
	<li><a href="#cupsRasterReadPixels" title="Read raster pixels.">cupsRasterReadPixels</a></li>

</ul>

<h3><a name="WRITING">Writing Raster Streams</a></h3>

<ul class="code">

	<li><a href="#cupsRasterInitPWGHeader" title="Interpret IPP attributes to create a page header.">cupsRasterInitPWGHeader</a></li>
	<li><a href="#cupsRasterWriteHeader" title="Write a raster page header from a version 1 page header structure.">cupsRasterWriteHeader</a> <span class="info">Deprecated in CUPS 1.2/macOS 10.5</span></li>
	<li><a href="#cupsRasterWriteHeader2" title="Write a raster page header from a version 2 page header structure.">cupsRasterWriteHeader2</a></li>
	<li><a href="#cupsRasterWritePixels" title="Write raster pixels.">cupsRasterWritePixels</a></li>

</ul>
      <h2 class="title"><a id="FUNCTIONS">Functions</a></h2>
<h3 class="function"><a id="cupsRasterClose">cupsRasterClose</a></h3>
        <p class="description">Close a raster stream.</p>
<p class="code">
void cupsRasterClose(<a href="#cups_raster_t">cups_raster_t</a> *r);</p>
<h4 class="parameters">Parameters</h4>
<table class="list"><tbody>
<tr><th>r</th>
        <td class="description">Stream to close</td></tr>
</tbody></table>
<h4 class="discussion">Discussion</h4>
        <p class="discussion">The file descriptor associated with the raster stream must be closed
separately as needed.</p>
<h3 class="function"><span class="info">&#160;CUPS 1.3/macOS 10.5&#160;</span><a id="cupsRasterErrorString">cupsRasterErrorString</a></h3>
        <p class="description">Return the last error from a raster function.</p>
<p class="code">
const char *cupsRasterErrorString(void);</p>
<h4 class="returnvalue">Return Value</h4>
        <p class="description">Last error or <code>NULL</code></p>
<h4 class="discussion">Discussion</h4>
        <p class="discussion">If there are no recent errors, <code>NULL</code> is returned.

</p>
<h3 class="function"><span class="info">&#160;CUPS 2.2/macOS 10.12&#160;</span><a id="cupsRasterInitPWGHeader">cupsRasterInitPWGHeader</a></h3>
        <p class="description">Initialize a page header for PWG Raster output.</p>
<p class="code">
int cupsRasterInitPWGHeader(<a href="#cups_page_header2_t">cups_page_header2_t</a> *h, pwg_media_t *media, const char *type, int xdpi, int ydpi, const char *sides, const char *sheet_back);</p>
<h4 class="parameters">Parameters</h4>
<table class="list"><tbody>
<tr><th>h</th>
        <td class="description">Page header</td></tr>
<tr><th>media</th>
        <td class="description">PWG media information</td></tr>
<tr><th>type</th>
        <td class="description">PWG raster type string</td></tr>
<tr><th>xdpi</th>
        <td class="description">Cross-feed direction (horizontal) resolution</td></tr>
<tr><th>ydpi</th>
        <td class="description">Feed direction (vertical) resolution</td></tr>
<tr><th>sides</th>
        <td class="description">IPP &quot;sides&quot; option value</td></tr>
<tr><th>sheet_back</th>
        <td class="description">Transform for back side or <code>NULL</code> for none</td></tr>
</tbody></table>
<h4 class="returnvalue">Return Value</h4>
        <p class="description">1 on success, 0 on failure</p>
<h4 class="discussion">Discussion</h4>
        <p class="discussion">The &quot;media&quot; argument specifies the media to use.<br>
<br>
The &quot;type&quot; argument specifies a &quot;pwg-raster-document-type-supported&quot; value
that controls the color space and bit depth of the raster data.<br>
<br>
The &quot;xres&quot; and &quot;yres&quot; arguments specify the raster resolution in dots per
inch.<br>
<br>
The &quot;sheet_back&quot; argument specifies a &quot;pwg-raster-document-sheet-back&quot; value
to apply for the back side of a page.  Pass <code>NULL</code> for the front side.

</p>
<h3 class="function"><a id="cupsRasterOpen">cupsRasterOpen</a></h3>
        <p class="description">Open a raster stream using a file descriptor.</p>
<p class="code">
<a href="#cups_raster_t">cups_raster_t</a> *cupsRasterOpen(int fd, <a href="#cups_mode_t">cups_mode_t</a> mode);</p>
<h4 class="parameters">Parameters</h4>
<table class="list"><tbody>
<tr><th>fd</th>
        <td class="description">File descriptor</td></tr>
<tr><th>mode</th>
        <td class="description">Mode - <code>CUPS_RASTER_READ</code>,
<code>CUPS_RASTER_WRITE</code>,
<code>CUPS_RASTER_WRITE_COMPRESSED</code>,
or <code>CUPS_RASTER_WRITE_PWG</code></td></tr>
</tbody></table>
<h4 class="returnvalue">Return Value</h4>
        <p class="description">New stream</p>
<h4 class="discussion">Discussion</h4>
        <p class="discussion">This function associates a raster stream with the given file descriptor.
For most printer driver filters, &quot;fd&quot; will be 0 (stdin).  For most raster
image processor (RIP) filters that generate raster data, &quot;fd&quot; will be 1
(stdout).<br>
<br>
When writing raster data, the <code>CUPS_RASTER_WRITE</code>,
<code>CUPS_RASTER_WRITE_COMPRESS</code>, or <code>CUPS_RASTER_WRITE_PWG</code> mode can
be used - compressed and PWG output is generally 25-50% smaller but adds a
100-300% execution time overhead.</p>
<h3 class="function"><a id="cupsRasterOpenIO">cupsRasterOpenIO</a></h3>
        <p class="description">Open a raster stream using a callback function.</p>
<p class="code">
<a href="#cups_raster_t">cups_raster_t</a> *cupsRasterOpenIO(<a href="#cups_raster_iocb_t">cups_raster_iocb_t</a> iocb, void *ctx, <a href="#cups_mode_t">cups_mode_t</a> mode);</p>
<h4 class="parameters">Parameters</h4>
<table class="list"><tbody>
<tr><th>iocb</th>
        <td class="description">Read/write callback</td></tr>
<tr><th>ctx</th>
        <td class="description">Context pointer for callback</td></tr>
<tr><th>mode</th>
        <td class="description">Mode - <code>CUPS_RASTER_READ</code>,
<code>CUPS_RASTER_WRITE</code>,
<code>CUPS_RASTER_WRITE_COMPRESSED</code>,
or <code>CUPS_RASTER_WRITE_PWG</code></td></tr>
</tbody></table>
<h4 class="returnvalue">Return Value</h4>
        <p class="description">New stream</p>
<h4 class="discussion">Discussion</h4>
        <p class="discussion">This function associates a raster stream with the given callback function and
context pointer.<br>
<br>
When writing raster data, the <code>CUPS_RASTER_WRITE</code>,
<code>CUPS_RASTER_WRITE_COMPRESS</code>, or <code>CUPS_RASTER_WRITE_PWG</code> mode can
be used - compressed and PWG output is generally 25-50% smaller but adds a
100-300% execution time overhead.</p>
<h3 class="function"><span class="info">&#160;DEPRECATED&#160;</span><a id="cupsRasterReadHeader">cupsRasterReadHeader</a></h3>
        <p class="description">Read a raster page header and store it in a
version 1 page header structure.</p>
<p class="code">
unsigned cupsRasterReadHeader(<a href="#cups_raster_t">cups_raster_t</a> *r, <a href="#cups_page_header_t">cups_page_header_t</a> *h);</p>
<h4 class="parameters">Parameters</h4>
<table class="list"><tbody>
<tr><th>r</th>
        <td class="description">Raster stream</td></tr>
<tr><th>h</th>
        <td class="description">Pointer to header data</td></tr>
</tbody></table>
<h4 class="returnvalue">Return Value</h4>
        <p class="description">1 on success, 0 on failure/end-of-file</p>
<h4 class="discussion">Discussion</h4>
        <p class="discussion">This function is deprecated. Use <a href="#cupsRasterReadHeader2"><code>cupsRasterReadHeader2</code></a> instead.<br>
<br>
Version 1 page headers were used in CUPS 1.0 and 1.1 and contain a subset
of the version 2 page header data. This function handles reading version 2
page headers and copying only the version 1 data into the provided buffer.

</p>
<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="cupsRasterReadHeader2">cupsRasterReadHeader2</a></h3>
        <p class="description">Read a raster page header and store it in a
version 2 page header structure.</p>
<p class="code">
unsigned cupsRasterReadHeader2(<a href="#cups_raster_t">cups_raster_t</a> *r, <a href="#cups_page_header2_t">cups_page_header2_t</a> *h);</p>
<h4 class="parameters">Parameters</h4>
<table class="list"><tbody>
<tr><th>r</th>
        <td class="description">Raster stream</td></tr>
<tr><th>h</th>
        <td class="description">Pointer to header data</td></tr>
</tbody></table>
<h4 class="returnvalue">Return Value</h4>
        <p class="description">1 on success, 0 on failure/end-of-file</p>
<h3 class="function"><a id="cupsRasterReadPixels">cupsRasterReadPixels</a></h3>
        <p class="description">Read raster pixels.</p>
<p class="code">
unsigned cupsRasterReadPixels(<a href="#cups_raster_t">cups_raster_t</a> *r, unsigned char *p, unsigned len);</p>
<h4 class="parameters">Parameters</h4>
<table class="list"><tbody>
<tr><th>r</th>
        <td class="description">Raster stream</td></tr>
<tr><th>p</th>
        <td class="description">Pointer to pixel buffer</td></tr>
<tr><th>len</th>
        <td class="description">Number of bytes to read</td></tr>
</tbody></table>
<h4 class="returnvalue">Return Value</h4>
        <p class="description">Number of bytes read</p>
<h4 class="discussion">Discussion</h4>
        <p class="discussion">For best performance, filters should read one or more whole lines.
The &quot;cupsBytesPerLine&quot; value from the page header can be used to allocate
the line buffer and as the number of bytes to read.</p>
<h3 class="function"><span class="info">&#160;DEPRECATED&#160;</span><a id="cupsRasterWriteHeader">cupsRasterWriteHeader</a></h3>
        <p class="description">Write a raster page header from a version 1 page
header structure.</p>
<p class="code">
unsigned cupsRasterWriteHeader(<a href="#cups_raster_t">cups_raster_t</a> *r, <a href="#cups_page_header_t">cups_page_header_t</a> *h);</p>
<h4 class="parameters">Parameters</h4>
<table class="list"><tbody>
<tr><th>r</th>
        <td class="description">Raster stream</td></tr>
<tr><th>h</th>
        <td class="description">Raster page header</td></tr>
</tbody></table>
<h4 class="returnvalue">Return Value</h4>
        <p class="description">1 on success, 0 on failure</p>
<h4 class="discussion">Discussion</h4>
        <p class="discussion">This function is deprecated. Use <a href="#cupsRasterWriteHeader2"><code>cupsRasterWriteHeader2</code></a> instead.

</p>
<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="cupsRasterWriteHeader2">cupsRasterWriteHeader2</a></h3>
        <p class="description">Write a raster page header from a version 2
page header structure.</p>
<p class="code">
unsigned cupsRasterWriteHeader2(<a href="#cups_raster_t">cups_raster_t</a> *r, <a href="#cups_page_header2_t">cups_page_header2_t</a> *h);</p>
<h4 class="parameters">Parameters</h4>
<table class="list"><tbody>
<tr><th>r</th>
        <td class="description">Raster stream</td></tr>
<tr><th>h</th>
        <td class="description">Raster page header</td></tr>
</tbody></table>
<h4 class="returnvalue">Return Value</h4>
        <p class="description">1 on success, 0 on failure</p>
<h4 class="discussion">Discussion</h4>
        <p class="discussion">The page header can be initialized using <a href="#cupsRasterInitPWGHeader"><code>cupsRasterInitPWGHeader</code></a>.

</p>
<h3 class="function"><a id="cupsRasterWritePixels">cupsRasterWritePixels</a></h3>
        <p class="description">Write raster pixels.</p>
<p class="code">
unsigned cupsRasterWritePixels(<a href="#cups_raster_t">cups_raster_t</a> *r, unsigned char *p, unsigned len);</p>
<h4 class="parameters">Parameters</h4>
<table class="list"><tbody>
<tr><th>r</th>
        <td class="description">Raster stream</td></tr>
<tr><th>p</th>
        <td class="description">Bytes to write</td></tr>
<tr><th>len</th>
        <td class="description">Number of bytes to write</td></tr>
</tbody></table>
<h4 class="returnvalue">Return Value</h4>
        <p class="description">Number of bytes written</p>
<h4 class="discussion">Discussion</h4>
        <p class="discussion">For best performance, filters should write one or more whole lines.
The &quot;cupsBytesPerLine&quot; value from the page header can be used to allocate
the line buffer and as the number of bytes to write.</p>
      <h2 class="title"><a id="TYPES">Data Types</a></h2>
      <h3 class="typedef"><a id="cups_adv_t">cups_adv_t</a></h3>
        <p class="description">AdvanceMedia attribute values</p>
      <p class="code">
typedef enum <a href="#cups_adv_e">cups_adv_e</a> cups_adv_t;
</p>
      <h3 class="typedef"><a id="cups_bool_t">cups_bool_t</a></h3>
        <p class="description">Boolean type</p>
      <p class="code">
typedef enum <a href="#cups_bool_e">cups_bool_e</a> cups_bool_t;
</p>
      <h3 class="typedef"><a id="cups_cspace_t">cups_cspace_t</a></h3>
        <p class="description">cupsColorSpace attribute values</p>
      <p class="code">
typedef enum <a href="#cups_cspace_e">cups_cspace_e</a> cups_cspace_t;
</p>
      <h3 class="typedef"><a id="cups_cut_t">cups_cut_t</a></h3>
        <p class="description">CutMedia attribute values</p>
      <p class="code">
typedef enum <a href="#cups_cut_e">cups_cut_e</a> cups_cut_t;
</p>
      <h3 class="typedef"><a id="cups_edge_t">cups_edge_t</a></h3>
        <p class="description">LeadingEdge attribute values</p>
      <p class="code">
typedef enum <a href="#cups_edge_e">cups_edge_e</a> cups_edge_t;
</p>
      <h3 class="typedef"><a id="cups_jog_t">cups_jog_t</a></h3>
        <p class="description">Jog attribute values</p>
      <p class="code">
typedef enum <a href="#cups_jog_e">cups_jog_e</a> cups_jog_t;
</p>
      <h3 class="typedef"><a id="cups_mode_t">cups_mode_t</a></h3>
        <p class="description">cupsRasterOpen modes</p>
      <p class="code">
typedef enum <a href="#cups_mode_e">cups_mode_e</a> cups_mode_t;
</p>
      <h3 class="typedef"><a id="cups_order_t">cups_order_t</a></h3>
        <p class="description">cupsColorOrder attribute values</p>
      <p class="code">
typedef enum <a href="#cups_order_e">cups_order_e</a> cups_order_t;
</p>
      <h3 class="typedef"><a id="cups_orient_t">cups_orient_t</a></h3>
        <p class="description">Orientation attribute values</p>
      <p class="code">
typedef enum <a href="#cups_orient_e">cups_orient_e</a> cups_orient_t;
</p>
      <h3 class="typedef"><a id="cups_page_header2_t"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span>cups_page_header2_t</a></h3>
        <p class="description">Version 2 page header </p>
      <p class="code">
typedef struct <a href="#cups_page_header2_s">cups_page_header2_s</a> cups_page_header2_t;
</p>
      <h3 class="typedef"><a id="cups_page_header_t"><span class="info">&#160;DEPRECATED&#160;</span>cups_page_header_t</a></h3>
        <p class="description">Version 1 page header </p>
      <p class="code">
typedef struct <a href="#cups_page_header_s">cups_page_header_s</a> cups_page_header_t;
</p>
      <h3 class="typedef"><a id="cups_raster_iocb_t">cups_raster_iocb_t</a></h3>
        <p class="description">cupsRasterOpenIO callback function</p>
      <p class="code">
typedef ssize_t (*cups_raster_iocb_t)(void *ctx, unsigned char *buffer, size_t length);
</p>
      <h3 class="typedef"><a id="cups_raster_t">cups_raster_t</a></h3>
        <p class="description">Raster stream data</p>
      <p class="code">
typedef struct _cups_raster_s cups_raster_t;
</p>
      <h2 class="title"><a id="STRUCTURES">Structures</a></h2>
<h3 class="struct"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="cups_page_header2_s">cups_page_header2_s</a></h3>
        <p class="description">Version 2 page header </p>
<p class="code">struct cups_page_header2_s {<br>
&#160;&#160;&#160;&#160;unsigned AdvanceDistance;<br>
&#160;&#160;&#160;&#160;<a href="#cups_adv_t">cups_adv_t</a> AdvanceMedia;<br>
&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Collate;<br>
&#160;&#160;&#160;&#160;<a href="#cups_cut_t">cups_cut_t</a> CutMedia;<br>
&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Duplex;<br>
&#160;&#160;&#160;&#160;unsigned HWResolution[2];<br>
&#160;&#160;&#160;&#160;unsigned ImagingBoundingBox[4];<br>
&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> InsertSheet;<br>
&#160;&#160;&#160;&#160;<a href="#cups_jog_t">cups_jog_t</a> Jog;<br>
&#160;&#160;&#160;&#160;<a href="#cups_edge_t">cups_edge_t</a> LeadingEdge;<br>
&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> ManualFeed;<br>
&#160;&#160;&#160;&#160;unsigned Margins[2];<br>
&#160;&#160;&#160;&#160;char MediaClass[64];<br>
&#160;&#160;&#160;&#160;char MediaColor[64];<br>
&#160;&#160;&#160;&#160;unsigned MediaPosition;<br>
&#160;&#160;&#160;&#160;char MediaType[64];<br>
&#160;&#160;&#160;&#160;unsigned MediaWeight;<br>
&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> MirrorPrint;<br>
&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> NegativePrint;<br>
&#160;&#160;&#160;&#160;unsigned NumCopies;<br>
&#160;&#160;&#160;&#160;<a href="#cups_orient_t">cups_orient_t</a> Orientation;<br>
&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> OutputFaceUp;<br>
&#160;&#160;&#160;&#160;char OutputType[64];<br>
&#160;&#160;&#160;&#160;unsigned PageSize[2];<br>
&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Separations;<br>
&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> TraySwitch;<br>
&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Tumble;<br>
&#160;&#160;&#160;&#160;unsigned cupsBitsPerColor;<br>
&#160;&#160;&#160;&#160;unsigned cupsBitsPerPixel;<br>
&#160;&#160;&#160;&#160;float cupsBorderlessScalingFactor;<br>
&#160;&#160;&#160;&#160;unsigned cupsBytesPerLine;<br>
&#160;&#160;&#160;&#160;<a href="#cups_order_t">cups_order_t</a> cupsColorOrder;<br>
&#160;&#160;&#160;&#160;<a href="#cups_cspace_t">cups_cspace_t</a> cupsColorSpace;<br>
&#160;&#160;&#160;&#160;unsigned cupsCompression;<br>
&#160;&#160;&#160;&#160;unsigned cupsHeight;<br>
&#160;&#160;&#160;&#160;float cupsImagingBBox[4];<br>
&#160;&#160;&#160;&#160;unsigned cupsInteger[16];<br>
&#160;&#160;&#160;&#160;char cupsMarkerType[64];<br>
&#160;&#160;&#160;&#160;unsigned cupsMediaType;<br>
&#160;&#160;&#160;&#160;unsigned cupsNumColors;<br>
&#160;&#160;&#160;&#160;char cupsPageSizeName[64];<br>
&#160;&#160;&#160;&#160;float cupsPageSize[2];<br>
&#160;&#160;&#160;&#160;float cupsReal[16];<br>
&#160;&#160;&#160;&#160;char cupsRenderingIntent[64];<br>
&#160;&#160;&#160;&#160;unsigned cupsRowCount;<br>
&#160;&#160;&#160;&#160;unsigned cupsRowFeed;<br>
&#160;&#160;&#160;&#160;unsigned cupsRowStep;<br>
&#160;&#160;&#160;&#160;char cupsString[16][64];<br>
&#160;&#160;&#160;&#160;unsigned cupsWidth;<br>
};</p>
<h4 class="members">Members</h4>
<table class="list"><tbody>
<tr><th>AdvanceDistance </th>
        <td class="description">AdvanceDistance value in points</td></tr>
<tr><th>AdvanceMedia </th>
        <td class="description">AdvanceMedia value (<a href="#cups_adv_t"><code>cups_adv_t</code></a>)</td></tr>
<tr><th>Collate </th>
        <td class="description">Collated copies value</td></tr>
<tr><th>CutMedia </th>
        <td class="description">CutMedia value (<a href="#cups_cut_t"><code>cups_cut_t</code></a>)</td></tr>
<tr><th>Duplex </th>
        <td class="description">Duplexed (double-sided) value</td></tr>
<tr><th>HWResolution[2] </th>
        <td class="description">Resolution in dots-per-inch</td></tr>
<tr><th>ImagingBoundingBox[4] </th>
        <td class="description">Pixel region that is painted (points, left, bottom, right, top)</td></tr>
<tr><th>InsertSheet </th>
        <td class="description">InsertSheet value</td></tr>
<tr><th>Jog </th>
        <td class="description">Jog value (<a href="#cups_jog_t"><code>cups_jog_t</code></a>)</td></tr>
<tr><th>LeadingEdge </th>
        <td class="description">LeadingEdge value (<a href="#cups_edge_t"><code>cups_edge_t</code></a>)</td></tr>
<tr><th>ManualFeed </th>
        <td class="description">ManualFeed value</td></tr>
<tr><th>Margins[2] </th>
        <td class="description">Lower-lefthand margins in points</td></tr>
<tr><th>MediaClass[64] </th>
        <td class="description">MediaClass string</td></tr>
<tr><th>MediaColor[64] </th>
        <td class="description">MediaColor string</td></tr>
<tr><th>MediaPosition </th>
        <td class="description">MediaPosition value</td></tr>
<tr><th>MediaType[64] </th>
        <td class="description">MediaType string</td></tr>
<tr><th>MediaWeight </th>
        <td class="description">MediaWeight value in grams/m^2</td></tr>
<tr><th>MirrorPrint </th>
        <td class="description">MirrorPrint value</td></tr>
<tr><th>NegativePrint </th>
        <td class="description">NegativePrint value</td></tr>
<tr><th>NumCopies </th>
        <td class="description">Number of copies to produce</td></tr>
<tr><th>Orientation </th>
        <td class="description">Orientation value (<a href="#cups_orient_t"><code>cups_orient_t</code></a>)</td></tr>
<tr><th>OutputFaceUp </th>
        <td class="description">OutputFaceUp value</td></tr>
<tr><th>OutputType[64] </th>
        <td class="description">OutputType string</td></tr>
<tr><th>PageSize[2] </th>
        <td class="description">Width and length of page in points</td></tr>
<tr><th>Separations </th>
        <td class="description">Separations value</td></tr>
<tr><th>TraySwitch </th>
        <td class="description">TraySwitch value</td></tr>
<tr><th>Tumble </th>
        <td class="description">Tumble value</td></tr>
<tr><th>cupsBitsPerColor </th>
        <td class="description">Number of bits for each color</td></tr>
<tr><th>cupsBitsPerPixel </th>
        <td class="description">Number of bits for each pixel</td></tr>
<tr><th>cupsBorderlessScalingFactor <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
        <td class="description">Scaling that was applied to page data </td></tr>
<tr><th>cupsBytesPerLine </th>
        <td class="description">Number of bytes per line</td></tr>
<tr><th>cupsColorOrder </th>
        <td class="description">Order of colors</td></tr>
<tr><th>cupsColorSpace </th>
        <td class="description">True colorspace</td></tr>
<tr><th>cupsCompression </th>
        <td class="description">Device compression to use</td></tr>
<tr><th>cupsHeight </th>
        <td class="description">Height of page image in pixels</td></tr>
<tr><th>cupsImagingBBox[4] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
        <td class="description">Floating point ImagingBoundingBox
(scaling factor not applied, left,
bottom, right, top) </td></tr>
<tr><th>cupsInteger[16] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
        <td class="description">User-defined integer values </td></tr>
<tr><th>cupsMarkerType[64] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
        <td class="description">Ink/toner type </td></tr>
<tr><th>cupsMediaType </th>
        <td class="description">Media type code</td></tr>
<tr><th>cupsNumColors <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
        <td class="description">Number of color compoents </td></tr>
<tr><th>cupsPageSizeName[64] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
        <td class="description">PageSize name </td></tr>
<tr><th>cupsPageSize[2] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
        <td class="description">Floating point PageSize (scaling *
factor not applied) </td></tr>
<tr><th>cupsReal[16] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
        <td class="description">User-defined floating-point values </td></tr>
<tr><th>cupsRenderingIntent[64] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
        <td class="description">Color rendering intent </td></tr>
<tr><th>cupsRowCount </th>
        <td class="description">Rows per band</td></tr>
<tr><th>cupsRowFeed </th>
        <td class="description">Feed between bands</td></tr>
<tr><th>cupsRowStep </th>
        <td class="description">Spacing between lines</td></tr>
<tr><th>cupsString[16][64] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
        <td class="description">User-defined string values </td></tr>
<tr><th>cupsWidth </th>
        <td class="description">Width of page image in pixels</td></tr>
</tbody></table>
<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</span><a id="cups_page_header_s">cups_page_header_s</a></h3>
        <p class="description">Version 1 page header </p>
<p class="code">struct cups_page_header_s {<br>
&#160;&#160;&#160;&#160;unsigned AdvanceDistance;<br>
&#160;&#160;&#160;&#160;<a href="#cups_adv_t">cups_adv_t</a> AdvanceMedia;<br>
&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Collate;<br>
&#160;&#160;&#160;&#160;<a href="#cups_cut_t">cups_cut_t</a> CutMedia;<br>
&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Duplex;<br>
&#160;&#160;&#160;&#160;unsigned HWResolution[2];<br>
&#160;&#160;&#160;&#160;unsigned ImagingBoundingBox[4];<br>
&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> InsertSheet;<br>
&#160;&#160;&#160;&#160;<a href="#cups_jog_t">cups_jog_t</a> Jog;<br>
&#160;&#160;&#160;&#160;<a href="#cups_edge_t">cups_edge_t</a> LeadingEdge;<br>
&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> ManualFeed;<br>
&#160;&#160;&#160;&#160;unsigned Margins[2];<br>
&#160;&#160;&#160;&#160;char MediaClass[64];<br>
&#160;&#160;&#160;&#160;char MediaColor[64];<br>
&#160;&#160;&#160;&#160;unsigned MediaPosition;<br>
&#160;&#160;&#160;&#160;char MediaType[64];<br>
&#160;&#160;&#160;&#160;unsigned MediaWeight;<br>
&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> MirrorPrint;<br>
&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> NegativePrint;<br>
&#160;&#160;&#160;&#160;unsigned NumCopies;<br>
&#160;&#160;&#160;&#160;<a href="#cups_orient_t">cups_orient_t</a> Orientation;<br>
&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> OutputFaceUp;<br>
&#160;&#160;&#160;&#160;char OutputType[64];<br>
&#160;&#160;&#160;&#160;unsigned PageSize[2];<br>
&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Separations;<br>
&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> TraySwitch;<br>
&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Tumble;<br>
&#160;&#160;&#160;&#160;unsigned cupsBitsPerColor;<br>
&#160;&#160;&#160;&#160;unsigned cupsBitsPerPixel;<br>
&#160;&#160;&#160;&#160;unsigned cupsBytesPerLine;<br>
&#160;&#160;&#160;&#160;<a href="#cups_order_t">cups_order_t</a> cupsColorOrder;<br>
&#160;&#160;&#160;&#160;<a href="#cups_cspace_t">cups_cspace_t</a> cupsColorSpace;<br>
&#160;&#160;&#160;&#160;unsigned cupsCompression;<br>
&#160;&#160;&#160;&#160;unsigned cupsHeight;<br>
&#160;&#160;&#160;&#160;unsigned cupsMediaType;<br>
&#160;&#160;&#160;&#160;unsigned cupsRowCount;<br>
&#160;&#160;&#160;&#160;unsigned cupsRowFeed;<br>
&#160;&#160;&#160;&#160;unsigned cupsRowStep;<br>
&#160;&#160;&#160;&#160;unsigned cupsWidth;<br>
};</p>
<h4 class="members">Members</h4>
<table class="list"><tbody>
<tr><th>AdvanceDistance </th>
        <td class="description">AdvanceDistance value in points</td></tr>
<tr><th>AdvanceMedia </th>
        <td class="description">AdvanceMedia value (<a href="#cups_adv_t"><code>cups_adv_t</code></a>)</td></tr>
<tr><th>Collate </th>
        <td class="description">Collated copies value</td></tr>
<tr><th>CutMedia </th>
        <td class="description">CutMedia value (<a href="#cups_cut_t"><code>cups_cut_t</code></a>)</td></tr>
<tr><th>Duplex </th>
        <td class="description">Duplexed (double-sided) value</td></tr>
<tr><th>HWResolution[2] </th>
        <td class="description">Resolution in dots-per-inch</td></tr>
<tr><th>ImagingBoundingBox[4] </th>
        <td class="description">Pixel region that is painted (points, left, bottom, right, top)</td></tr>
<tr><th>InsertSheet </th>
        <td class="description">InsertSheet value</td></tr>
<tr><th>Jog </th>
        <td class="description">Jog value (<a href="#cups_jog_t"><code>cups_jog_t</code></a>)</td></tr>
<tr><th>LeadingEdge </th>
        <td class="description">LeadingEdge value (<a href="#cups_edge_t"><code>cups_edge_t</code></a>)</td></tr>
<tr><th>ManualFeed </th>
        <td class="description">ManualFeed value</td></tr>
<tr><th>Margins[2] </th>
        <td class="description">Lower-lefthand margins in points</td></tr>
<tr><th>MediaClass[64] </th>
        <td class="description">MediaClass string</td></tr>
<tr><th>MediaColor[64] </th>
        <td class="description">MediaColor string</td></tr>
<tr><th>MediaPosition </th>
        <td class="description">MediaPosition value</td></tr>
<tr><th>MediaType[64] </th>
        <td class="description">MediaType string</td></tr>
<tr><th>MediaWeight </th>
        <td class="description">MediaWeight value in grams/m^2</td></tr>
<tr><th>MirrorPrint </th>
        <td class="description">MirrorPrint value</td></tr>
<tr><th>NegativePrint </th>
        <td class="description">NegativePrint value</td></tr>
<tr><th>NumCopies </th>
        <td class="description">Number of copies to produce</td></tr>
<tr><th>Orientation </th>
        <td class="description">Orientation value (<a href="#cups_orient_t"><code>cups_orient_t</code></a>)</td></tr>
<tr><th>OutputFaceUp </th>
        <td class="description">OutputFaceUp value</td></tr>
<tr><th>OutputType[64] </th>
        <td class="description">OutputType string</td></tr>
<tr><th>PageSize[2] </th>
        <td class="description">Width and length of page in points</td></tr>
<tr><th>Separations </th>
        <td class="description">Separations value</td></tr>
<tr><th>TraySwitch </th>
        <td class="description">TraySwitch value</td></tr>
<tr><th>Tumble </th>
        <td class="description">Tumble value</td></tr>
<tr><th>cupsBitsPerColor </th>
        <td class="description">Number of bits for each color</td></tr>
<tr><th>cupsBitsPerPixel </th>
        <td class="description">Number of bits for each pixel</td></tr>
<tr><th>cupsBytesPerLine </th>
        <td class="description">Number of bytes per line</td></tr>
<tr><th>cupsColorOrder </th>
        <td class="description">Order of colors</td></tr>
<tr><th>cupsColorSpace </th>
        <td class="description">True colorspace</td></tr>
<tr><th>cupsCompression </th>
        <td class="description">Device compression to use</td></tr>
<tr><th>cupsHeight </th>
        <td class="description">Height of page image in pixels</td></tr>
<tr><th>cupsMediaType </th>
        <td class="description">Media type code</td></tr>
<tr><th>cupsRowCount </th>
        <td class="description">Rows per band</td></tr>
<tr><th>cupsRowFeed </th>
        <td class="description">Feed between bands</td></tr>
<tr><th>cupsRowStep </th>
        <td class="description">Spacing between lines</td></tr>
<tr><th>cupsWidth </th>
        <td class="description">Width of page image in pixels</td></tr>
</tbody></table>
      <h2 class="title"><a id="ENUMERATIONS">Constants</a></h2>
      <h3 class="enumeration"><a id="cups_adv_e">cups_adv_e</a></h3>
        <p class="description">AdvanceMedia attribute values</p>
      <h4 class="constants">Constants</h4>
      <table class="list"><tbody>
        <tr><th>CUPS_ADVANCE_FILE </th>        <td class="description">Advance the roll after this file</td></tr>
        <tr><th>CUPS_ADVANCE_JOB </th>        <td class="description">Advance the roll after this job</td></tr>
        <tr><th>CUPS_ADVANCE_NONE </th>        <td class="description">Never advance the roll</td></tr>
        <tr><th>CUPS_ADVANCE_PAGE </th>        <td class="description">Advance the roll after this page</td></tr>
        <tr><th>CUPS_ADVANCE_SET </th>        <td class="description">Advance the roll after this set</td></tr>
</tbody></table>
      <h3 class="enumeration"><a id="cups_bool_e">cups_bool_e</a></h3>
        <p class="description">Boolean type</p>
      <h4 class="constants">Constants</h4>
      <table class="list"><tbody>
        <tr><th>CUPS_FALSE </th>        <td class="description">Logical false</td></tr>
        <tr><th>CUPS_TRUE </th>        <td class="description">Logical true</td></tr>
</tbody></table>
      <h3 class="enumeration"><a id="cups_cspace_e">cups_cspace_e</a></h3>
        <p class="description">cupsColorSpace attribute values</p>
      <h4 class="constants">Constants</h4>
      <table class="list"><tbody>
        <tr><th>CUPS_CSPACE_ADOBERGB <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">Red, green, blue (Adobe RGB) </td></tr>
        <tr><th>CUPS_CSPACE_CIELab <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">CIE Lab </td></tr>
        <tr><th>CUPS_CSPACE_CIEXYZ <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">CIE XYZ </td></tr>
        <tr><th>CUPS_CSPACE_CMY </th>        <td class="description">Cyan, magenta, yellow (DeviceCMY)</td></tr>
        <tr><th>CUPS_CSPACE_CMYK </th>        <td class="description">Cyan, magenta, yellow, black (DeviceCMYK)</td></tr>
        <tr><th>CUPS_CSPACE_DEVICE1 <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 1 color </td></tr>
        <tr><th>CUPS_CSPACE_DEVICE2 <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 2 colors </td></tr>
        <tr><th>CUPS_CSPACE_DEVICE3 <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 3 colors </td></tr>
        <tr><th>CUPS_CSPACE_DEVICE4 <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 4 colors </td></tr>
        <tr><th>CUPS_CSPACE_DEVICE5 <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 5 colors </td></tr>
        <tr><th>CUPS_CSPACE_DEVICE6 <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 6 colors </td></tr>
        <tr><th>CUPS_CSPACE_DEVICE7 <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 7 colors </td></tr>
        <tr><th>CUPS_CSPACE_DEVICE8 <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 8 colors </td></tr>
        <tr><th>CUPS_CSPACE_DEVICE9 <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 9 colors </td></tr>
        <tr><th>CUPS_CSPACE_DEVICEA <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 10 colors </td></tr>
        <tr><th>CUPS_CSPACE_DEVICEB <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 11 colors </td></tr>
        <tr><th>CUPS_CSPACE_DEVICEC <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 12 colors </td></tr>
        <tr><th>CUPS_CSPACE_DEVICED <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 13 colors </td></tr>
        <tr><th>CUPS_CSPACE_DEVICEE <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 14 colors </td></tr>
        <tr><th>CUPS_CSPACE_DEVICEF <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 15 colors </td></tr>
        <tr><th>CUPS_CSPACE_GMCK <span class="info">&#160;DEPRECATED&#160;</span></th>        <td class="description">Gold, magenta, yellow, black </td></tr>
        <tr><th>CUPS_CSPACE_GMCS <span class="info">&#160;DEPRECATED&#160;</span></th>        <td class="description">Gold, magenta, yellow, silver </td></tr>
        <tr><th>CUPS_CSPACE_GOLD <span class="info">&#160;DEPRECATED&#160;</span></th>        <td class="description">Gold foil </td></tr>
        <tr><th>CUPS_CSPACE_ICC1 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 1 color </td></tr>
        <tr><th>CUPS_CSPACE_ICC2 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 2 colors </td></tr>
        <tr><th>CUPS_CSPACE_ICC3 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 3 colors </td></tr>
        <tr><th>CUPS_CSPACE_ICC4 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 4 colors </td></tr>
        <tr><th>CUPS_CSPACE_ICC5 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 5 colors </td></tr>
        <tr><th>CUPS_CSPACE_ICC6 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 6 colors </td></tr>
        <tr><th>CUPS_CSPACE_ICC7 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 7 colors </td></tr>
        <tr><th>CUPS_CSPACE_ICC8 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 8 colors </td></tr>
        <tr><th>CUPS_CSPACE_ICC9 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 9 colors </td></tr>
        <tr><th>CUPS_CSPACE_ICCA <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 10 colors </td></tr>
        <tr><th>CUPS_CSPACE_ICCB <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 11 colors </td></tr>
        <tr><th>CUPS_CSPACE_ICCC <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 12 colors </td></tr>
        <tr><th>CUPS_CSPACE_ICCD <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 13 colors </td></tr>
        <tr><th>CUPS_CSPACE_ICCE <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 14 colors </td></tr>
        <tr><th>CUPS_CSPACE_ICCF <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 15 colors </td></tr>
        <tr><th>CUPS_CSPACE_K </th>        <td class="description">Black (DeviceK)</td></tr>
        <tr><th>CUPS_CSPACE_KCMY <span class="info">&#160;DEPRECATED&#160;</span></th>        <td class="description">Black, cyan, magenta, yellow </td></tr>
        <tr><th>CUPS_CSPACE_KCMYcm <span class="info">&#160;DEPRECATED&#160;</span></th>        <td class="description">Black, cyan, magenta, yellow, light-cyan, light-magenta </td></tr>
        <tr><th>CUPS_CSPACE_RGB </th>        <td class="description">Red, green, blue (DeviceRGB, sRGB by default)</td></tr>
        <tr><th>CUPS_CSPACE_RGBA </th>        <td class="description">Red, green, blue, alpha (DeviceRGB, sRGB by default)</td></tr>
        <tr><th>CUPS_CSPACE_RGBW <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>        <td class="description">Red, green, blue, white (DeviceRGB, sRGB by default) </td></tr>
        <tr><th>CUPS_CSPACE_SILVER <span class="info">&#160;DEPRECATED&#160;</span></th>        <td class="description">Silver foil </td></tr>
        <tr><th>CUPS_CSPACE_SRGB <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">Red, green, blue (sRGB) </td></tr>
        <tr><th>CUPS_CSPACE_SW <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">Luminance (gamma 2.2) </td></tr>
        <tr><th>CUPS_CSPACE_W </th>        <td class="description">Luminance (DeviceGray, gamma 2.2 by default)</td></tr>
        <tr><th>CUPS_CSPACE_WHITE <span class="info">&#160;DEPRECATED&#160;</span></th>        <td class="description">White ink (as black) </td></tr>
        <tr><th>CUPS_CSPACE_YMC <span class="info">&#160;DEPRECATED&#160;</span></th>        <td class="description">Yellow, magenta, cyan </td></tr>
        <tr><th>CUPS_CSPACE_YMCK <span class="info">&#160;DEPRECATED&#160;</span></th>        <td class="description">Yellow, magenta, cyan, black </td></tr>
</tbody></table>
      <h3 class="enumeration"><a id="cups_cut_e">cups_cut_e</a></h3>
        <p class="description">CutMedia attribute values</p>
      <h4 class="constants">Constants</h4>
      <table class="list"><tbody>
        <tr><th>CUPS_CUT_FILE </th>        <td class="description">Cut the roll after this file</td></tr>
        <tr><th>CUPS_CUT_JOB </th>        <td class="description">Cut the roll after this job</td></tr>
        <tr><th>CUPS_CUT_NONE </th>        <td class="description">Never cut the roll</td></tr>
        <tr><th>CUPS_CUT_PAGE </th>        <td class="description">Cut the roll after this page</td></tr>
        <tr><th>CUPS_CUT_SET </th>        <td class="description">Cut the roll after this set</td></tr>
</tbody></table>
      <h3 class="enumeration"><a id="cups_edge_e">cups_edge_e</a></h3>
        <p class="description">LeadingEdge attribute values</p>
      <h4 class="constants">Constants</h4>
      <table class="list"><tbody>
        <tr><th>CUPS_EDGE_BOTTOM </th>        <td class="description">Leading edge is the bottom of the page</td></tr>
        <tr><th>CUPS_EDGE_LEFT </th>        <td class="description">Leading edge is the left of the page</td></tr>
        <tr><th>CUPS_EDGE_RIGHT </th>        <td class="description">Leading edge is the right of the page</td></tr>
        <tr><th>CUPS_EDGE_TOP </th>        <td class="description">Leading edge is the top of the page</td></tr>
</tbody></table>
      <h3 class="enumeration"><a id="cups_jog_e">cups_jog_e</a></h3>
        <p class="description">Jog attribute values</p>
      <h4 class="constants">Constants</h4>
      <table class="list"><tbody>
        <tr><th>CUPS_JOG_FILE </th>        <td class="description">Move pages after this file</td></tr>
        <tr><th>CUPS_JOG_JOB </th>        <td class="description">Move pages after this job</td></tr>
        <tr><th>CUPS_JOG_NONE </th>        <td class="description">Never move pages</td></tr>
        <tr><th>CUPS_JOG_SET </th>        <td class="description">Move pages after this set</td></tr>
</tbody></table>
      <h3 class="enumeration"><a id="cups_mode_e">cups_mode_e</a></h3>
        <p class="description">cupsRasterOpen modes</p>
      <h4 class="constants">Constants</h4>
      <table class="list"><tbody>
        <tr><th>CUPS_RASTER_READ </th>        <td class="description">Open stream for reading</td></tr>
        <tr><th>CUPS_RASTER_WRITE </th>        <td class="description">Open stream for writing</td></tr>
        <tr><th>CUPS_RASTER_WRITE_COMPRESSED <span class="info">&#160;CUPS 1.3/macOS 10.5&#160;</span></th>        <td class="description">Open stream for compressed writing </td></tr>
        <tr><th>CUPS_RASTER_WRITE_PWG <span class="info">&#160;CUPS 1.5/macOS 10.7&#160;</span></th>        <td class="description">Open stream for compressed writing in PWG Raster mode </td></tr>
</tbody></table>
      <h3 class="enumeration"><a id="cups_order_e">cups_order_e</a></h3>
        <p class="description">cupsColorOrder attribute values</p>
      <h4 class="constants">Constants</h4>
      <table class="list"><tbody>
        <tr><th>CUPS_ORDER_BANDED </th>        <td class="description">CCC MMM YYY KKK ...</td></tr>
        <tr><th>CUPS_ORDER_CHUNKED </th>        <td class="description">CMYK CMYK CMYK ...</td></tr>
        <tr><th>CUPS_ORDER_PLANAR </th>        <td class="description">CCC ... MMM ... YYY ... KKK ...</td></tr>
</tbody></table>
      <h3 class="enumeration"><a id="cups_orient_e">cups_orient_e</a></h3>
        <p class="description">Orientation attribute values</p>
      <h4 class="constants">Constants</h4>
      <table class="list"><tbody>
        <tr><th>CUPS_ORIENT_0 </th>        <td class="description">Don't rotate the page</td></tr>
        <tr><th>CUPS_ORIENT_180 </th>        <td class="description">Turn the page upside down</td></tr>
        <tr><th>CUPS_ORIENT_270 </th>        <td class="description">Rotate the page clockwise</td></tr>
        <tr><th>CUPS_ORIENT_90 </th>        <td class="description">Rotate the page counter-clockwise</td></tr>
</tbody></table>
    </div>
  </body>
</html>
